package gui;

import java.awt.*;
/**
 * Cette classe gere le zone d'affichage des figures
 * @author Romain POGU
 * @author Anthony MAUGENDRE
 * @version 1.0
 *
 */
public class ZoneDessin extends Canvas{
	/**
	 * 
	 */
	private static final long serialVersionUID = -2654225248787735038L;
	private FenetAffiche frame;
	private Image backgroundCanvas = null;
	private Graphics backgroundGraphics;

	/**
	 * Constructeur
	 * 
	 * @param frame Fenetre dans laquelle la zone d'affichage des figures est affichee
	 */
	public ZoneDessin(FenetAffiche frame) {
		this.frame = frame;
		setBackground(Color.white);
		addMouseListener(new GestionBoutonsSouris(frame));
		addMouseMotionListener(new GestionBoutonsSouris(frame));
	}

	/**
	 * Methode qui repeint les figures dans la zone d affichage en arriere plan
	 * avant de passer la zone d'affichage au premier plan.
	 * Cela permet d'eviter le scintillement des figures lors de leurs deplacements.
	 * @param g contexte graphique 
	 */
	synchronized public void paint(Graphics g) {
		drawBackgroundCanvas();
		g.drawImage(backgroundCanvas, 0, 0, this);
	}

	/**
	 * Methode qui appelle la methode paint. Un update revient a faire un paint.
	 * @param g contexte graphique 
	 */
	public void update(Graphics g) {
		paint(g);
	}
	
	/**
	 * Methode qui cree une zone d'affichage en arriere plan si elle n'est pas deja cree. 
	 * Les figures sont ensuite peintes sur cette zone d'affichage.  
	 */
	void drawBackgroundCanvas() {
		if (backgroundCanvas == null) {
			this.reInitBackgroundCanvas();
		}
		backgroundGraphics.setColor(getBackground());
		backgroundGraphics.fillRect(0, 0, frame.getWidth(), frame.getHeight());
		//TODO adapter resize
       	//frame.dessineElastique(backgroundGraphics);
	}
	
	/**
	 * Methode qui cree une zone d'affichage de la taille de la fenetre en arriere plan 
	 * et le contexte graphique
	 */
	void reInitBackgroundCanvas() {
		backgroundCanvas = createImage(frame.getWidth(), frame.getHeight());
		backgroundGraphics = backgroundCanvas.getGraphics();
	}

}